From: sirvine@waikato.ac.nz (SIRVEX)
Newsgroups: comp.sys.sinclair
Subject: Spectrum ROM Routines
Date: 25 Jan 94 15:35:01 +1300

Found this lying around on a disk. Not sure where I got it from,
but somebody might find it useful. Maybe it could go in the FAQ.
Note: I am not the original author, I don't know who is.

Spectrum ROM
============

The Spectrum ROM is a 16K machine code program, which can be
broken down into 10 logical `blocks' as detailed below.

Address	Routine
------- -------

RESTART ROUTINES AND TABLES

0000	Start
0008	Error restart
0010	Print a character
0018	Collect a character
0020	Collect next character
0028	Calculator restart
0030	Create free locations in work space
0038	Maskable interrupt routine
0053	Error-2 routine
0066	Non-maskable interrupt routine
0074	CD_ADD + 1 subroutine
007D	Skip over
0095	Token tables
0205	Key tables

KEYBOARD ROUTINES

028E	Keyboard scanning
02BF	Scan keyboard and decode value
0310	Repeat key routine
031E	Test key value
0333	Keyboard decoding

LOUDSPEAKER ROUTINES

03B5	Routine to control loudspeaker
03F8	Handle BEEP command
046E	Semi-tone table

CASSETTE HANDLING ROUTINES

04C2	Save header and program/data bytes
053F	Reset border and check BREAK key for LOAD and SAVE
0556	Load header and block of information
05E3	Check signal being loaded
0605	Entry point for tape commands
07CB	Handle VERIFY control
0802	Load a data block
0808	Handle LOAD control
08B6	Handle MERGE control
0970	Handle SAVE control
09A1	Canned cassette messages

SCREEN AND PRINTER HANDLING ROUTINES

09F4	General PRINT routine
0A11	Control character table
0A23	Cursor left routine
0A3D	Cursor right routine
0A4F	Perform carriage return
0A5F	Print comma
0A69	Print question mark
0A6D	Control characters with operands
0AD9	Print character(s)
0ADC	Store line, column, and pixel address
0B03	Fetch position parameters
0B24	Print any character
0B7F	Print all characters
0BDB	Set attribute
0C0A	Message printing
0C3B	Handle recursive printing
0C41	Table search
0C55	Test for scroll
0CF8	`scroll?' message
0D4D	Temporary colour items
0D6B	Handle CLS command
0DAF	Clearing whole display area
0DD9	Set line and column numbers
0DFE	Handle scrolling
0E44	Clear bottom lines of display
0E88	Attribute handling
0E9B	Handle display with line number
0EAC	Handle COPY command
0ECD	Pass printer buffer to printer
0EF4	Copy line routine
0F2C	Editor routine for BASIC and INPUT
0F81	Add code to current line
0FA0	Editing keys table
0FA9	Handle EDIT key
0FF3	Cursor down editing
1007	Cursor left editing
100C	Cursor right editing
1015	DELETE editing
101E	Ignore next 2 codes from key-input routine
1024	Enter editing
1031	Move cursor when editing
1059	Cursor up editing
1076	Use of symbol and graphics codes
107F	Editor error routine
1097	Clear work space
10A8	Handle keyboard input
111D	Lower screen copying
1190	Point to first and last locations of work space
11A7	Remove floating point from line number

EXECUTIVE ROUTINES

11B7	Handle NEW command
11CB	Main entry (initialization)
11DA	Check RAMTOP
12A2	Main execution loop
1319	Canned report messages
155D	Handle addition of BASIC line
15AF	Initial channel information
15C6	Initial stream data
15D4	Control for input subroutine
15E6	Make HL point to input address
15EF	Main printing
1601	Open channel
1615	Set channel flags
162D	Channel code look-up table
1634	Channel K flag
1642	Channel S flag
164D	Channel P flag
1652	Just one space required?
1655	Otherwise, make room
1664	Hold pointers for making room
168F	Collect line number
169E	Handle reserve room
16B0	Clear various editing areas
16D4	Reclaim edit-line
16DB	Look through tables
16E5	Handle CLOSE# command
1716	CLOSE stream look-up table
171E	Stream data
1736	Handle OPEN# command
177A	OPEN stream look-up table
1793	Handle CAT, ERASE, FORMAT, MOVE commands
1795	Handle LIST, LLIST commands
1795	Perform AUTO-LIST
17F5	Handle LLIST
17F9	Handle LIST
1855	Print a whole BASIC line
18B6	Check for a number marker
18C1	Print a flashing character
18E1	Print the cursor
190F	Get line number of next line
1925	Printing characters in a BASIC line
196E	Get starting address of line, or line after
1980	Compare line numbers
1988	Find each statement
19B8	Get next one
19DD	Difference routine
19E5	Handle reclaiming space
19FB	Read line number of line in editing area
1A1B	Report and line number printing

BASIC LINE AND COMMAND INTERPRETATION

1A48	Syntax tables
1B17	Main parser (BASIC interpreter)
1B28	Statement loop
1B52	Temporary pointer to entries in table
1B6F	Check for syntactical spaces
1B76	Come here after interpretation
1B8A	Run at a given line number
1B9E	Find start address of new line
1BB2	Handle REM command
1BB3	End of line?
1BBF	General line checking
1BD1	Go to next line
1BEE	End of program?
1BF4	Go to next statement
1C01	Command class table
1C0D	Command classes---00, 03, and 05
1C16	Jump to appropriate command
1C1F	Command classes---01, 02, and 04
1C22	Variable in assignment
1C56	Fetch a value
1C79	Expect numeric/string expression
1C96	Set permanent colours (class 07)
1CBE	Command class---09
1CDB	Command class---0B
1CDE	Fetch a number
1CEE	Handle STOP command
1CF0	Handle IF command
1D03	Handle FOR command
1D86	Find DATA, DEF FN, or NEXT
1DAB	Handle NEXT command
1DDA	Perform NEXT loop
1DEC	Handle READ command
1E27	Handle DATA command
1E39	Check statement for DATA or DEF FN
1E42	Handle RESTORE command
1E4F	Handle RANDOMIZE command
1E5F	Handle CONTINUE command
1E67	Handle GO TO command
1E7A	Handle OUT command
1E80	Handle POKE command
1E85	Check parameters on calculator stack
1E94	Find integers
1EA1	Handle RUN command
1EAC	Handle CLEAR command
1EED	Handle GO SUB command
1F05	Check available memory
1F1A	Free memory
1F23	Handle RETURN command
1F3A	Handle PAUSE command
1F54	Check for BREAK key
1F60	Handle DEF FN command
1FC3	Returning early from subroutine
1FC9	Handle LPRINT command
1FCF	Handle PRINT command
1FF5	Print carriage return
1FFC	Print items
2045	End of printing
204E	Print position
2070	Alter stream
2089	Handle INPUT command
21B9	Used during input
21D6	Only called for channel K
21E1	Colour item routines
226C	Handle change of colour
2294	Handle BORDER command
22AA	Get pixel address
22CB	Get point
22DC	Handle PLOT command
2307	Put two numbers in BC register
2314	Put stack in A register
2320	Handle CIRCLE command
2382	Handle DRAW command
247D	Initial parameters
24B7	Line drawing

EXPRESSION EVALUATION

24FB	Scan expression
2530	Check syntax
2535	Scanning SCREEN$
2580	Scanning ATTR
2596	Scanning function table
25AF	Scanning function routines
26C9	Scanning variable routines
2734	Scanning main loop
2795	Table of operators
27B0	Table of priorities
27BD	Scanning function (FN)
28AB	Used with DEF FN
28B2	Used with variables and DEF FN
2951	Stack function argument
2996	Check variable table
2A52	Handle slicing of strings
2AB6	Pass five registers to calculator stack
2ACC	Return result of evaluating next expression
2AEE	Subroutine
2AF4	Subroutine
2AFF	Handle LET command
2BF1	Get last value from calculator stack
2C02	Handle DIM command
2C88	Check whether digit or letter
2C9B	Decimal floating point
2D1B	Check for valid digit
2D22	and again
2D28	Convert binary to floating point for A register
2D2B	Ditto for BC register
2D3B	Integer to floating point

ARITHMETIC ROUTINES

2D4F	E-format to floating point
2D7F	Fetch integer
2D8E	Store integer
2DA2	Floating point to BC register
2DC1	Handle LOG
2DD5	Floating point to A
2DE3	Print a floating point number
2F8B	Handle printing floating point
2F9B	Prepare to add
2FBA	Fetch two numbers
2FDD	Shift floating point number right
3004	Add back any carry
300F	Handle subtraction (03)
3014	Handle addition (0F)
30A9	Used in 16 bit multiplication
30C0	Prepare to multiply or divide
30CA	Handle multiplication (04)
31AF	Handle division (05)
3124	Integer truncation towards zero (3A)
3293	Re-stack two `small' integers
3297	Re-stack one number in full form

FLOATING-POINT CALCULATOR

32C5	Table of constants
32D7	Table of addresses
335B	Called in floating point
33A1	Handle delete (02)
33A2	Single operation (3B)
33A9	Test five-spaces
33B4	Stack number
33C0	Move a floating point number (31)
33C6	Stack literals (34)
33F7	Skip constants
3406	Memory location
340F	Get from memory area (E0 etc.)
341B	Stack a constant (A0 etc.)
342D	Store in a memory area (C0 etc.)
343C	Swap first number with second number
3449	Series generator (86 etc.)
346A	Absolute magnitude (2A)
346E	Handle unary minus (1B)
3492	Signum (29)
34A5	Handle IN command (2C)
34AC	Handle PEEK command (2B)
34B3	USR number (2D)
34BC	USR string (19)
34E9	Test for zero
34F9	Greater than zero (37)
3501	Handle NOT operator (30)
3506	Less than zero (36)
350B	Zero or one
351B	Handle OR operator (07)
3524	Handle number AND number (08)
352D	Handle string ANF number (10)
353B	Perform comparison (09--0E, 11--16)
359C	String concatenation (17)
35BF	Check stack pointers
35C9	Handle CHR$ (2F)
35DE	Handle VAL and VAL$ (1D, 18)
361F	Handle STR$ (2E)
3645	Read-in (1A)
3669	Handle CODE (1C)
3674	Handle LEN (1E)
367A	Decrease the counter (35)
3686	Jump (33)
368F	Jump on true (00)
369B	End of calculation (38)
36A0	Modulus (32)
36AF	Handle INT (27)
36C4	Exponential (26)
3713	Natural logarithm (25)
3783	Reduce argument (39)
37AA	Handle cosine (20)
37B5	Handle sine (1F)
37DA	Handle tangent (21)
37E2	Handle arctan (24)
3833	Handle arcsin (22)
3843	Handle arccos (23)
384A	Handle square root (28)
3851	Handle exponential (06)

